/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.struts2.tiles.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Represents a <code>&lt;definition&gt;</code> element in <code>tiles.xml</code>.
 *
 * <p>
 *  With a sample layout in <code>tiles.xml</code> like this:
 *  <pre>
 *      &lt;definition name="layout" template="/WEB-INF/tiles/layout.jsp"&gt;
 *          &lt;put-attribute name="header" value=".header"/&gt;
 *          &lt;put-attribute name="body" value=".body"/&gt;
 *      &lt;/definition&gt;
 *  </pre>
 * </p>
 * <p>
 *  You can annotate an action like that:
 *  <pre>
 *      {@literal @}Result(name = "success", type="tiles")
 *      {@literal @}TilesDefinition(extend = "layout", putAttributes = {
 *          {@literal @}TilesPutAttribute(name = "header", value = "/WEB-INF/tiles/header.jsp"),
 *          {@literal @}TilesPutAttribute(name = "body", value = "/WEB-INF/tiles/body.ftl")
 *      })
 *      public class FooAction extends ActionSupport {
 *  </pre>
 * </p>
 *
 */
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.TYPE })
@Inherited
public @interface TilesDefinition {

    String extend() default "";
    String name() default "";
    String preparer() default "";
    String role() default "";
    String template() default "";
    String templateExpression() default "";
    String templateType() default "";
    TilesPutAttribute[] putAttributes() default {};
    TilesPutListAttribute[] putListAttributes() default {};
}
